package DFGA.population;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import DFGA.DFGAParameter;
import DFGA.chromosome.DFGAChrom;
import abstractGA.GAParameter;
import abstractGA.chrom.Chrom;
import abstractGA.popu.PopuBuilder;
import abstractGA.popu.Population;
import algorithm.AlgCtx;

public class DFGAPopuBuilder extends PopuBuilder {
	// ������������
	protected GAParameter parameter = null;
	// ������������
	protected Random rnd = null;
	// ���������������
	protected List<Chrom> chroms = null;
	// DFGA������
	protected Population popu = null;

	public DFGAPopuBuilder() {
		// ������DFGA���������
		popu = new DFGAPopu();
	}

	@Override
	/**
	 * ������������������
	 * 
	 * @param algCtx:���������������������
	 */
	public void buildPara(AlgCtx algCtx) {
		parameter = new DFGAParameter(algCtx.getAlgCfgFileName());
		popu.setParameter(parameter);
	}

	@Override
	/**
	 * ���������������������
	 * 
	 * @param algCtx:���������������������
	 */
	public void buildChroms(AlgCtx algCtx) {
		chroms = new ArrayList<Chrom>();
		int size = parameter.getPopuSize();
		for (int i = 0; i < size; i++) {
			/*
			 * ������������������������DFGA���������
			 */
			Chrom chrom = new DFGAChrom(algCtx, parameter);
			boolean fesi = Boolean.parseBoolean(chrom.getObjVals().get(0).toString().trim());
			if (fesi) {
				chroms.add(chrom);
				continue;
			}
			i--;
		}
		popu.setChroms(chroms);
	}
	
	
	@Override
	// ������������������������
	public Population getPopu() {
		return popu;
	}

	@Override
	// ���������������������
	public void buildRandom() {
		rnd = new Random();
		popu.setRandom(rnd);
	}
}